iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

前言

如果光檢視這個標題 - 產生單元測試 可能會讓開發者有過於期待的情況發生。雖然本篇文章提供的案例確實可以產生單元測試,但對於組織內既有的程式碼若為 “非可測試程式”,或開發人員沒有具有撰寫可測試程式的經驗/能力,可能其效益不大。這邊回應了 Copilot 並非無所不能,仍需要準確的指引才能給予協助。

 
 
 

前置作業

我們節錄微軟官方的案例,並做一些簡單整理。整理好的範例專案完整程式碼在(前置作業完成在 Main 分支,完成的內容在 Done 分支) ,有興趣的朋友可以下載時做看看。

首先我們需要建立一個 IsPrime 的服務:在方案下建立 Numbers 類別庫,加入 PrimeSerivce.cs,並加入下圖中的程式碼。

https://ithelp.ithome.com.tw/upload/images/20241009/20091494W13ZQBjtp3.png

新增 xUnit 測試專案
https://ithelp.ithome.com.tw/upload/images/20241009/200914945f8E4ZeTMG.png

設定專案名稱為 PrimeService.UnitTest,容易識別。
https://ithelp.ithome.com.tw/upload/images/20241009/20091494T0WBsibykd.png

在新建的測試專案內加入專案參考 - Number 專案

https://ithelp.ithome.com.tw/upload/images/20241009/20091494i15alvojhA.png

https://ithelp.ithome.com.tw/upload/images/20241009/20091494IT7mQ5z77F.png

 
 
 

產生單元測試

使用內嵌方式產生單元測試
首先,我們以內嵌方式給予提示,@workspace /tests 產生適用於 xUnit framework 的 unit tests
https://ithelp.ithome.com.tw/upload/images/20241009/20091494KLAYPc7Sq6.png

GitHub Copilot 會產生出測試案例,我們點選接受

完成後會發現有錯誤產生,這個錯誤是類別名稱與 namespace 衝突,且沒有引用類別庫內的 namespace 或類別。
https://ithelp.ithome.com.tw/upload/images/20241009/20091494gCMPIVV1Db.png

如下圖修正後,測試程式可以正常建置與執行
https://ithelp.ithome.com.tw/upload/images/20241009/20091494xpg55G2Xwt.png

 
 

使用聊天模式產生單元測試
我們開啟 Chat View ,以相同的 @workspace /tests 產生適用於 xUnit framework 的 unit tests 提示來產生單元測試。
https://ithelp.ithome.com.tw/upload/images/20241009/20091494Jl03lrLxeF.png

在單元測試專案下建立一個新的檔案 (PrimeServiceTests.cs),將建議的內容複製貼上並簡單整理。
(如果您是使用 Visual Studio,可以點選插入新檔案,將檔案儲存至單元測試專案下)
https://ithelp.ithome.com.tw/upload/images/20241009/20091494YZJsJmlaB4.png

完成後內容如下:
眼尖的讀者會發現內嵌與聊天方式所產生出來的測試案例有所不同,並可能需要進行調整後才沒有錯誤。另一方面,namespace、class 與 method 可能也需要調整會較為一致,避免混淆。所以使用 GitHub Copilot 並非一蹴可幾。
https://ithelp.ithome.com.tw/upload/images/20241009/200914941ZnVMKf73c.png

 
   

進行測試

最後您可以在單元測試任一檔案空白處點選執行測試,確認每個測試案例皆有通過,完成我們這次 GitHub Copilot 產生 Unit Test 示範。
https://ithelp.ithome.com.tw/upload/images/20241009/20091494XsqqkWFgjJ.png

 
 
 

後記

若讀者有機會實際實作,應該會發現許多實作案例可能需要視情況做調整,或者多次修改提示並測試。唯有多次嘗試並累積經驗,才能讓這位副駕駛提供準確的建議並提高正駕駛的工作生產力,建議讀者可以多找幾篇實作案例練習。


上一篇
GitHub Copilot 使用案例: 格式轉換、修正與例外處理
下一篇
GitHub Copilot 使用案例:產生文件
系列文
現代化應用程式開發與維運 - GitHub Codespace 與 GitHub Copilot30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言